home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Bavarian / Bavarian #088 (19xx)(APS Electronic).zip / Bavarian #088 (19xx)(APS Electronic).adf / screenprint (.txt) < prev   
AmigaBASIC Source Code  |  1986-12-20  |  3KB  |  107 lines

  1. MainLoop:
  2. k$ = INKEY$
  3. IF k$ = "z" THEN 
  4.    GOSUB DrawLines:
  5. ELSEIF k$ = "d" THEN
  6.    BorderFlag% = 0  
  7.    GOSUB ScreenDump
  8.    FOR de = 1 TO 5000: NEXT
  9. END IF
  10. GOTO MainLoop:
  11. ScreenDump:
  12. IF AlreadyDeclared = 0 THEN
  13.  DECLARE FUNCTION AllocSignal%() LIBRARY
  14.  DECLARE FUNCTION AllocMem&()    LIBRARY
  15.  DECLARE FUNCTION FindTask&()    LIBRARY
  16.  DECLARE FUNCTION DoIO&()        LIBRARY
  17.  DECLARE FUNCTION OpenDevice&    LIBRARY
  18.  AlreadyDeclared = 1
  19. END IF
  20. sWindow&   = WINDOW(7)
  21. sScreen&   = PEEKL(sWindow& + 46)
  22. sViewPort& = sScreen& + 44
  23. sRastPort& = sScreen& + 84
  24. sColorMap& = PEEKL(sViewPort& + 4)
  25. maxWidth%  = PEEKW(sScreen& + 12)
  26. maxHeight% = PEEKW(sScreen& + 14)
  27. viewModes% = PEEKW(sViewPort& + 32)
  28. command%  = 11   
  29. srcX% = 0        
  30. srcY% = 0 
  31. srcWidth%  = maxWidth%
  32. srcHeight% = maxHeight%
  33. destRows& = 0    
  34. destCols& = 0
  35. special% = &H84  
  36. IF BorderFlag% = 0 THEN 
  37.    srcX% = srcX% + 3
  38.    srcY% = srcY% + 11
  39.    srcWidth%  = srcWidth% - 3 - 11
  40.    srcHeight% = srcHeight% - 11 - 3
  41. END IF   
  42. LIBRARY "exec.library"
  43. sigBit% =  AllocSignal%(-1)
  44. ClearPublic& = 65537
  45. msgPort& = AllocMem&(40,ClearPublic&)
  46. IF msgPort& = 0 THEN
  47.    PRINT "msgPort nicht allokierbar."
  48.    GOTO cleanup4
  49. END IF
  50. POKE(msgPort& + 8), 4 'Type=NT_MSGPORT
  51. POKE(msgPort& + 9), 0 'Priority 0 
  52. portName$ = "MyPrtPort"+CHR$(0)
  53. POKEL(msgPort& + 10), SADD(portName$)
  54. POKE(msgPort& + 14), 0 'Flags
  55. POKE(msgPort& + 15), sigBit%
  56. sigTask& = FindTask&(0)
  57. POKEL(msgPort& + 16), sigTask&
  58. CALL AddPort(msgPort&)  'Port hinzufuegen
  59. ioRequest& = AllocMem&(64,ClearPublic&)
  60. IF ioRequest& = 0  THEN
  61.    PRINT "ioRequest nicht allokierbar."
  62.    GOTO cleanup3
  63. END IF
  64. POKE(ioRequest& + 8),5 'Type=NT_MESSAGE
  65. POKE(ioRequest& + 9),0 'Priority 0
  66. POKEL(ioRequest& + 14), msgPort&
  67. devName$ = "printer.device"+CHR$(0)
  68. pError& = OpenDevice&(SADD(devName$),0,ioRequest&,0)
  69. IF pError& <> 0  THEN
  70.    PRINT "Drucker nicht ansprechbar."
  71.    GOTO cleanup2
  72. END IF
  73. POKEW(ioRequest& + 28), command%
  74. POKEL(ioRequest& + 32), sRastPort&
  75. POKEL(ioRequest& + 36), sColorMap&
  76. POKEL(ioRequest& + 40), viewModes%
  77. POKEW(ioRequest& + 44), srcX%
  78. POKEW(ioRequest& + 46), srcY%
  79. POKEW(ioRequest& + 48), srcWidth%
  80. POKEW(ioRequest& + 50), srcHeight%
  81. POKEL(ioRequest& + 52), destCols&
  82. POKEL(ioRequest& + 56), destRows&
  83. POKEW(ioRequest& + 60), special%
  84. ioError& = DoIO&(ioRequest&)
  85. IF ioError& <> 0 THEN
  86.    PRINT "DumpRPort Fehler =" ioError&
  87.    GOTO cleanup1
  88. END IF
  89. cleanup1:
  90.    CALL CloseDevice(ioRequest&)
  91. cleanup2:
  92.    POKE(ioRequest& + 8), &Hff
  93.    POKEL(ioRequest& + 20), -1
  94.    POKEL(ioRequest& + 24), -1
  95.    CALL FreeMem(ioRequest&,64)
  96. cleanup3:
  97.    CALL RemPort(msgPort&)
  98.    POKE(msgPort& + 8), &Hff  
  99.    POKEL(msgPort& + 20), -1
  100.    CALL FreeSignal(sigBit%)
  101.    CALL FreeMem(msgPort&,40)
  102. cleanup4:   
  103.    LIBRARY CLOSE
  104. RETURN
  105.    
  106.       
  107.